<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>01-伪数组</title>
</head>

<body>
    <ul>
        <li>黑色幽默</li>
        <li>黑色毛衣</li>
        <li>七里香</li>
        <li>发如雪</li>
    </ul>
    <script>
        /* 
    伪数组 (arrayLike/类数组)
       是一种按照索引存储数据且具有 length 属性的对象。
       因为是对象，所以不能调用数组的方法，比如 forEach()、push() 等。

    类数组对象(伪数组)满足以下条件：
      1. 对象必须有属性，并指定数组的长度，否则转化后就是空数组
      2. 数组对象的属性必须是数值或数值型字符串，并且从0，1，2，3，
  */

        // 普通对象
        let hero = {
            age: 22,
            name: '貂蝉',
            sex: true,
        };

        // 伪数组对象
        let arr = {
            0: "张飞",
            1: "吕布",
            2: "孙红雷",
            3: "齐天大圣",
            4: "刘华强",
            length: 5,
        }
        function sum() {
            let lis = document.querySelectorAll('li');
            console.log(lis);
            console.log(lis instanceof Array);  // false
            lis.push("张飞");  // 报错 lis.push is not a function
        }
        sum(1, 2, 3, 4, 5)
    </script>
</body>

</html>